1000 REM * DARKTERM '88 1010 REM * HAYES MODEM FILE SOURCE 1020 REM * 1030 OPEN1,8,15,"S0:D'88.HAYES":CLOSE1 1040 OPEN2,8,1,"0:D'88.HAYES" 1050 SYS700 1060 .OPT O2 1070 ; 1080 CHKIN =$FFC6 ; KERNEL EQUATES 1090 CHKOUT =$FFC9 1100 CHRIN =$FFCF 1110 CHROUT =$FFD2 1120 CLRCHN =$FFCC 1130 GETIN =$FFE4 1140 ; 1150 PTR =138 ; TEMPORARY POINTERS 1160 ST =140 1170 PREFIX =930 ; DIALING PREFIX 1180 PRELEN =929 ; PREFIX LENGTH 1190 ; 1200 DETECT =922 ; CARRIER DETECT FLAG 1210 DDELAY =927 ; DIALING DELAY 1220 WDELAY =926 ; CARRIER WAIT DELAY 1230 HDELAY =925 ; ON-HOOK DELAY 1240 ; 1250 ; * SETTING THE INPUT/OUTPUTS * 1260 ; THE GVC I TESTED WITH SETS 1270 ; THE DDR REGISTER TO $84 HEX 1280 ; WHICH WOULD BE DSR AND DTR 1290 ; AS OUTPUTS AND THE REST AS 1300 ; INPUTS. I DUNNO IF THIS IS 1310 ; CORRECT. ACCORDING TO THE 1320 ; 64 REFERENCE MANUAL, RTS AND 1330 ; DTR SHOULD BE THE ONLY OUTPUTS 1340 ; LEMME KNOW WHAT THEY SHOULD 1350 ; BE IF THIS VALUE IS NO (null). 1360 ; 1370 *=$4500 ; STARTS HERE UP TO $47FF 1380 ; 1390 JMP ANSWER ; AUTO-ANSWER 1400 JMP DODIAL ; AUTO-DIAL 1410 JMP ONHOOK ; LABEL SAYS ALL 1420 JMP OFHOOK ; OFF HOOK 1430 JMP CARCHK ; LOST CARRIER CHECK 1440 JMP CUSTOM ; USER DEFINED ROUTINE 1450 JMP HANGUP ; HANGUP ROUTINE 1460 ; 1470 DODIAL LDA #$84 1480 STA $DD03 ; SET DDR REGISTER 1490 STX PTR ; X/Y POINT TO DIAL 1500 STY PTR+1 ; STRING (18 DIGITS) 1510 JSR RETURN ; SEND 2 TO BEGIN 1520 LDA HDELAY ; WAIT SOME 1530 JSR WAIT 1540 LDX #5 1550 JSR CHKOUT 1560 LDY #0 1570 DODO1 CPY PRELEN ; CHECK LENGTH 1580 BEQ DODO2 ; BEFORE SENDING IN CASE 1590 LDA PREFIX,Y ; THERE IS NO PREFIX 1600 JSR MODOUT 1610 INY 1620 BNE DODO1 1630 DODO2 LDY #0 1640 DODO3 LDA (PTR),Y ; GET STRING 1650 CMP #32 ; SKIP ALL BLANKS 1660 BEQ DODO4 1670 AND #127 ; MASK FOR ASCII 1680 JSR MODOUT 1690 DODO4 INY 1700 CPY #18 ; DO ALL 18 BYTES 1710 BNE DODO3 1720 LDA #13 ; SEND THE 1730 JSR MODOUT 1740 JSR CLRCHN 1750 LDA WDELAY ; AND WAIT FOR CARRIER 1760 JSR WAIT 1770 LDA 56577 ; HAVE ONE 1780 AND #16 1790 BNE DODO5 ; YES (BIT IS INVERTED) 1800 SEC ; NOT ABORTED, SET C FLAG 1810 LDA #0 ; NO CARRIER, SET Z FLAG 1820 RTS 1830 DODO5 SEC ; SET C FLAG 1840 LDA #1 ; CARRIER, CLEAR Z FLAG 1850 RTS 1860 ; 1870 WAIT TAX 1880 W0 JSR CLRTIM ; CLEAR TI CLOCK 1890 W1 LDA 145 ; CHECK STOP KEY 1900 CMP #$7F 1910 BEQ W2 ; IF PRESSED, ABORT 1920 LDA 162 1930 CMP #60 ; ONE SECOND 1940 BCC W1 1950 DEX ; X NUMBER OF TIMES 1960 BEQ W3 1970 BNE W0 1980 W2 PLA 1990 PLA 2000 CLC ; CLEAR C FLAG - USER ABORTED 2010 W3 RTS 2020 ; 2030 ONHOOK LDA #70 ; WAIT ONE SEC... 2040 JSR JIFFY 2050 LDX #5 2060 JSR CHKOUT 2070 LDA #"+" ; SEND +++ SEQUENCE 2080 JSR MODOUT 2090 JSR MODOUT 2100 JSR MODOUT 2110 JSR CLRCHN 2120 LDA #70 ; WAIT ONE MORE SEC... 2130 JMP JIFFY 2140 ; 2150 OFHOOK JSR SMART ; OFF-HOOK 2160 .ASC "ATD" 2170 .BYT 13,0 2180 RTS 2190 ; 2200 SMART LDA 56577 ; SEND AT COMMANDS 2210 AND #16 2220 BEQ SM1 2230 JSR ONHOOK ; HANG UP UNTIL NO 2240 JMP SMART ; CARRIER 2250 SM1 PLA ; GET STRING ADDRESS FROM 2260 STA ST ; RETURN ADDRESS 2270 PLA 2280 STA ST+1 2290 LDX #5 2300 JSR CHKOUT 2310 LDA #40 ; WAIT >.5 SEC... 2320 JSR JIFFY 2330 SM2 INC ST 2340 BNE SM3 2350 INC ST+1 2360 SM3 LDY #0 2370 LDA (ST),Y ; SEND COMMAND 2380 BEQ SM4 2390 JSR MODOUT 2400 JMP SM2 2410 SM4 JSR CLRCHN 2420 LDA #40 ; WAIT SOME MORE 2430 JSR JIFFY 2440 LDA ST+1 ; PUSH NEW RETURN ADDRESS 2450 PHA 2460 LDA ST 2470 PHA 2480 RTS 2490 ; 2500 MODOUT JSR CHROUT 2510 MODO1 LDX 669 ; WAIT FOR RS232 TO 2520 CPX 670 ; (null) IDLE BEFORE SENDING 2530 BNE MODO1 ; AGAIN 2540 RTS 2550 ; 2560 RETURN LDX #5 2570 JSR CHKOUT 2580 LDA #13 2590 JSR MODOUT 2600 JSR MODOUT 2610 JMP CLRCHN 2620 ; 2630 CUSTOM RTS ; NONE NEEDED FOR 1670 2640 ; 2650 CARCHK BIT DETECT ; IF DETECT IS 2660 BPL CAR1 ; 0 THEN IGNORE CARRIER 2670 LDA $DD01 2680 AND #16 2690 BNE CAR1 2700 CLC ; DROPPED CARRIER 2710 RTS ; SO CLEAR C FLAG 2720 CAR1 SEC 2730 RTS 2740 ; 2750 CLRTIM LDA #0 2760 STA 160 2770 STA 161 2780 STA 162 2790 RTS 2800 ; 2810 JIFFY TAX ; WAIT SOME JIFFIES 2820 JSR CLRTIM 2830 JIF1 CPX 162 2840 BCS JIF1 2850 RTS 2860 ; 2870 ANSWER JSR RESET ; RESET MODEM 2880 ANS0 JSR SMART ; SEND AT ACK 2890 .ASC "AT H1 S0=1" 2900 .BYT 13,0 2910 LDX #5 2920 JSR CHKIN 2930 JSR GETIN 2940 PHA 2950 JSR CLRCHN 2960 PLA 2970 AND #127 2980 CMP #"0" ; WAIT FOR OKAY RESPONSE 2990 BNE ANS0 3000 ANS1 LDX #5 3010 JSR CHKIN 3020 JSR GETIN ; WAIT FOR NUMERICAL 3030 PHA ; RESPONSE 3040 JSR CLRCHN 3050 PLA 3060 AND #127 ; DISCARD BIT 7 3070 CMP #"1" ; 300 BAUD 3080 BEQ ANS2 ; YES 3090 CMP #"5" ; 1200 BAUD 3100 BEQ ANS3 ; YES 3110 JSR GETIN ; GET KEY FROM KEYBOARD 3120 CMP #0 3130 BEQ ANS1 3140 CLC 3150 RTS 3160 ANS2 LDX #<300 3170 LDY #>300 3180 BNE ANS4 3190 ANS3 LDX #<1200 3200 LDY #>1200 3210 ANS4 SEC 3220 RTS 3230 ; 3240 RESET LDA $29B 3250 STA $29C 3260 JSR SMART 3270 .ASC "ATZ" 3280 .BYT 13,0 3290 LDA #75 3300 JSR JIFFY 3310 LDA $29B 3320 STA $29C 3330 JSR SMART 3340 .ASC "AT V0 M0 X1" 3350 .BYT 13,0 3360 LDA #75 3370 JMP JIFFY 3380 ; 3390 HANGUP JSR ONHOOK ; SEND +++ SEQ. 3400 JSR SMART ; SEND COMMAND STRING 3410 .ASC "AT H0 S0=0" 3420 .BYT 13,0 3430 LDA $DD01 3440 AND #16 ; CHECK CARRIER 3450 BNE HANGUP ; STILL THERE, TRY MORE 3460 LDA $29B 3470 STA $29C 3480 RTS